Network coding is a known network transmission technique that generally improves the network throughput and is resilient to packet loss. For example, linear network coding is a known efficient way to achieve the network capacity of multicast. Routing is a special case of linear network coding. Instead of just routing, linear network coding may allow one or more intermediate network nodes to transmit new packets generated by linear combinations of the packets received by an intermediate node.
Linear network coding may be realized, for example, by choosing linear combination coefficients uniformly at random from a finite field, which is called random linear network coding. Random linear network coding may have the advantage that network coding can be implemented in the form of a distribution system in such a way that neither one of a source node and a destination node need to know about the network topology beforehand. Hence it is robustly effective in the face of network topology changes.
For random linear network coding, the network transfer matrix is usually unknown to both the source node and the destination node. Channel training is a widely applied method when using random linear network coding, in which part of input packets may be used to recover the network transfer matrix in the destination node. Channel training is efficient when the overhead used to recover the network transfer matrix is relatively small, compared with the size of the packets. However, channel training may not be efficient, and may not be applied, for example, when the size of overhead is large.